package model.registro;


public class RegistroDiccionario extends Registro implements Comparable<RegistroDiccionario> {

	private String aPalabra;
	private int aOffSet;
	
	public RegistroDiccionario() {}
	
	public RegistroDiccionario(String xPalabra,int xOffSet) {
		
		aPalabra=xPalabra;
		aOffSet=xOffSet;		
	}

	//Convierte el registro a una tira de bytes para ser grabado en disco , Serializacion del registro
	    public byte[] convertirRegistroABytes() {
//Creo tres arrays de bytes , uno para cada elemento a transformar 
		byte[] bytesTamanioPalabra=new byte[ConversionesTiposDatos.sizeOfInt()];
		byte[] bytesPalabra=new byte[aPalabra.getBytes().length];
		byte[] bytesOffSet=new byte[ConversionesTiposDatos.sizeOfInt()];

//Transformo cada elemento a bytes
		bytesTamanioPalabra=ConversionesTiposDatos.convertirIntABytes(aPalabra.getBytes().length);
		bytesPalabra=aPalabra.getBytes();
		bytesOffSet=ConversionesTiposDatos.convertirIntABytes(aOffSet);
//Creo un solo array del tamanio de la suma de todos los elementos
		byte[] datosRegistro=new byte[bytesTamanioPalabra.length+bytesPalabra.length+bytesOffSet.length];
//Escribo en el array los bytes de cada elemento uno consecutivo al otro		
		int j=0;
		for(int i=0;i<bytesTamanioPalabra.length;i++){
			datosRegistro[j]=bytesTamanioPalabra[i];
			j++;
		}
		for(int i=0;i<bytesPalabra.length;i++){
			datosRegistro[j]=bytesPalabra[i];
			j++;
		}
		for(int i=0;i<bytesOffSet.length;i++){
			datosRegistro[j]=bytesOffSet[i];
			j++;
		}		
		
		return datosRegistro;
	}
//Lee una tira de bytes y la transforma en un registro de Diccionario
	public void convertirBytesARegistro(byte[] xBytesAConvertir) {
		//Lee un int y ese es el tamanio de la palabra
		byte[] bytesTamanioPalabra=new byte[ConversionesTiposDatos.sizeOfInt()];
		
		int i=0;
		int j=0;
		
		for(i=0;i<(ConversionesTiposDatos.sizeOfInt());i++)
			bytesTamanioPalabra[i]=xBytesAConvertir[i];
	//lee de los bytes del tamanio palabra y lo convierte a Int para saber el tamanio de la palabra a leer
		int tamanioPalabra=ConversionesTiposDatos.convertirBytesAInt(bytesTamanioPalabra);
		
		byte[] tempPalabra=new byte[tamanioPalabra];		
	//lee byte a byte la palabra con el tamanio antes calculado	
		for(j=0;j<tamanioPalabra||i==tamanioPalabra;j++){
			tempPalabra[j]=xBytesAConvertir[i];
			i++;
		}
	//carga la palabra de los chars q tenia leidos	
		aPalabra=new String(tempPalabra);

		byte[] tempOffSet=new byte[xBytesAConvertir.length];
		for(j=0;j<(ConversionesTiposDatos.sizeOfInt());j++){
			tempOffSet[j]=xBytesAConvertir[i];
			i++;
		}
		
		aOffSet=ConversionesTiposDatos.convertirBytesAInt(tempOffSet);
			
	}
	
	public long getOffSet() {
		return aOffSet;
	}

	public String getPalabra() {
		return aPalabra;
	}

	public int getTamanioOffSet() {
		return ConversionesTiposDatos.sizeOfInt();
	}

	public int getTamanioPalabra() {
		return aPalabra.length();
	}

	public int getTamanioRegistro() {
		return aPalabra.getBytes().length+2*ConversionesTiposDatos.sizeOfInt();
	}

	public void setPalabra(String palabra) {
		aPalabra = palabra;
	}
	public int compareTo(RegistroDiccionario o) {
		return this.getPalabra().compareTo(o.getPalabra());
	}

	public void setOffSet(int offSet) {
		aOffSet = offSet;
	}

	
}
